package com.baichang.taoshunda.service.impl;

import cn.jpush.api.utils.StringUtils;
import com.baichang.framework.Constant;
import com.baichang.framework.excelption.ServiceException;
import com.baichang.framework.utils.RedisUtil;
import com.baichang.taoshunda.SMSConstants;
import com.baichang.taoshunda.dao.DeliveryClerkDao;
import com.baichang.taoshunda.entity.DeliveryClerk;
import com.baichang.taoshunda.service.DeliveryMsgService;
import com.baichang.taoshunda.utils.MsgUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DeliveryMsgServiceImpl implements DeliveryMsgService {

    @Autowired
    private DeliveryClerkDao deliveryClerkDao;

    /**
     * 获取登录验证码
     *
     * @param mobile 账号
     * @return
     */
    @Override
    public boolean getLoginMsg(String mobile) throws ServiceException {
        if (StringUtils.isEmpty(mobile)) {
            throw new ServiceException("手机号不能为空");
        }
        //1.判断手机号是否存在
        DeliveryClerk deliveryClerk = deliveryClerkDao.getDeliveryByPhone(mobile);
        if (deliveryClerk == null) {
            throw new ServiceException("该手机号尚未被注册");
        }
        //2.获取验证码
        return MsgUtils.sendMsg(mobile, SMSConstants.msgCodeTemplate);
    }

    /**
     * 验证验证码
     * * 1.判断手机号
     * 2.判断是否发送验证码
     * 3.判断验证码是否正确
     *
     * @param phone 手机号
     * @param code  验证码
     * @return 验证成功/失败
     */
    @Override
    public boolean checkCodeMsg(String phone, String code) throws ServiceException {
        //1.判断手机号
        if (StringUtils.isEmpty(phone)) {
            throw new ServiceException("手机号不能为空");
        }
        //2.判断是否发送验证码
        String redisCode = RedisUtil.get(Constant.SESSION_CODE_KEY + phone);
        if (StringUtils.isEmpty(redisCode)) {
            throw new ServiceException("尚未发送验证码");
        }
        //3.判断验证码是否正确
        if (!code.equals(redisCode)) {
            throw new ServiceException("验证码不正确");
        }
        return true;
    }

    /**
     * 根据手机号获取注册验证码
     * 1.判断手机号是否存在
     * 2.手机号如果被删除或不存在可以注册
     * 3.获取随机数
     * 4.将获取到的随机数存放到redis下
     * 5.调用云通讯发送验证码
     *
     * @param phone 手机号
     * @return 发送成功/失败
     */
    @Override
    public boolean getRegisterMsg(String phone) throws ServiceException {
        if (StringUtils.isEmpty(phone)) {
            throw new ServiceException("手机号不能为空");
        }
        //1.判断手机号是否存在
        DeliveryClerk deliveryClerk = deliveryClerkDao.getDeliveryByPhone(phone);
        if (deliveryClerk != null) {
            throw new ServiceException("该手机号已被注册");
        }
        //2.获取验证码
        return MsgUtils.sendMsg(phone, SMSConstants.msgCodeTemplate);
    }

    /**
     * 根据手机号获取忘记密码验证码
     * 1.判断手机号是否存在
     * 2.手机号如果不存在提示用户不存在
     * 3.获取随机数
     * 4.将获取到的随机数存放到redis下
     * 5.调用云通讯发送验证码
     *
     * @param mobile 手机号
     * @return 发送成功/失败
     */
    @Override
    public boolean getForgetPwdMsg(String mobile) throws ServiceException {
        if (StringUtils.isEmpty(mobile)) {
            throw new ServiceException("手机号不能为空");
        }
        //1.判断手机号是否存在
        DeliveryClerk deliveryClerk = deliveryClerkDao.getDeliveryByPhone(mobile);
        if (deliveryClerk == null) {
            throw new ServiceException("该手机号尚未被注册");
        }
        return MsgUtils.sendMsg(mobile, SMSConstants.msgCodeTemplate);
    }

    /**
     * 获取手机号验证码
     *
     * @param phone 手机号
     * @return
     */
    @Override
    public boolean getCodeByUserPhone(String phone) throws ServiceException {
        if (StringUtils.isEmpty(phone)) {
            throw new ServiceException("手机号不能为空");
        }
        //2.获取验证码
        return MsgUtils.sendMsg(phone, SMSConstants.msgCodeTemplate);
    }

    /**
     * 验证忘记密码验证码
     * 1.判断手机号
     * 2.判断是否发送验证码
     * 3.判断验证码是否正确
     *
     * @param phone 手机号
     * @param code  验证码
     * @return 发送成功/失败
     */
    @Override
    public boolean checkForeignPwdCode(String phone, String code) throws ServiceException {
        //1.判断手机号
        if (StringUtils.isEmpty(phone)) {
            throw new ServiceException("手机号不能为空");
        }
        //2.判断是否发送验证码
        String redisCode = RedisUtil.get(Constant.SESSION_CODE_KEY + phone);
        if (cn.jpush.api.utils.StringUtils.isEmpty(redisCode)) {
            throw new ServiceException("尚未发送验证码");
        }
        //3.判断验证码是否正确
        if (!code.equals(redisCode)) {
            throw new ServiceException("验证码不正确");
        }
        return true;
    }


}
